<?php

namespace Roles\Model;

//use Zend\Db\TableGateway\TableGateway;

require_once('nusoap/nusoap.php');
use nusoap_client as SoapClient;

class PerfilTable {

/*   protected $tableGateway;

   public function __construct(TableGateway $tableGateway) {
      $this->tableGateway = $tableGateway;
   }*/

   private $client;

   public function __construct() {
      $this->client = new SoapClient('http://soap.asistencia.uca.edu.py/roles_soap.php');
   }

/*   public function fetchAll() {
      $resultSet = $this->tableGateway->select();
      return $resultSet;
   }*/

   //SOAP Client Version
   public function fetchAll() {

      $result = $this->client->call('perfiltable_fetchAll',array());
      //var_dump($result);

      //convertimos la respuesta de array a objetos
      $rowset = json_decode(json_encode($result), FALSE);

      return $rowset;
   }

/*   public function getPerfil($id) {
      $id = (int) $id;
      $rowset = $this->tableGateway->select(array('id' => $id));
      $row = $rowset->current();
      if (!$row) {
         throw new \Exception("Could not find row $id");
      }
      return $row;
   }*/

   //SOAP Client Version
   public function getPerfil($id) {
      $id = (int) $id;

      $result = $this->client->call('getPerfil',array('id' => $id));

      if (empty($result)) {
         throw new \Exception("Could not find row $id");
      }

      $perfil = new Perfil();
      $rowset = json_decode(json_encode($result), FALSE);

      $data = array(
         'id' => $rowset[0]->id,
         'nombre_perfil' => $rowset[0]->nombre_perfil,
         'descripcion' => $rowset[0]->descripcion,
      );
      $perfil->exchangeArray($data);

      return $perfil;
   }

/*   public function savePerfil(Perfil $perfil) {
      $data = array(
         'nombre_perfil' => $perfil->nombre_perfil,
         'descripcion'   => $perfil->descripcion,
      );

      $id = (int)$perfil->id;
      if ($id == 0) {
         $this->tableGateway->insert($data);
      } else {
         if ($this->getPerfil($id)) {
            $this->tableGateway->update($data, array('id' => $id));
         } else {
            throw new \Exception('id does not exist');
         }
      }
   }*/

   //SOAP Client Version
   public function savePerfil(Perfil $perfil) {
      $data = array(
         'id'            => $perfil->id,
         'nombre_perfil' => $perfil->nombre_perfil,
         'descripcion'   => $perfil->descripcion,
      );

      $id = (int)$perfil->id;
      if ($id == 0) {
         $this->client->call('insertPerfil', $data);
      } else {
         if ($this->getPerfil($id)) {
            $this->client->call('updatePerfil', $data);
         } else {
            throw new \Exception('id does not exist');
         }
      }
   }

/*   public function deletePerfil($id) {
      $this->tableGateway->delete(array('id' => $id));
   }*/

  //SOAP Client version
   public function deletePerfil($id) {
      $this->client->call('deletePerfil', array('id' => $id));
   }

/*   public function getPerfilesByUsuario($id) {
      $select  = new \Zend\Db\Sql\Select;
//SELECT P.id, P.nombre_perfil, P.descripcion, usuario_perfil.id AS id_usuario_perfil FROM perfiles P LEFT JOIN usuario_perfil ON P.id = usuario_perfil.id_perfil AND usuario_perfil.id_usuario = $id ORDER BY p.id ASC;

      $select->from('perfiles');
      $select->columns(array('id','nombre_perfil','descripcion'));
      $join_expression = new \Zend\Db\Sql\Expression("perfiles.id = usuario_perfil.id_perfil AND usuario_perfil.id_usuario = " . $id);
      $select->join('usuario_perfil',$join_expression,array('id_usuario_perfil' => 'id'),'left');
      $select->order('perfiles.id');
      //echo $select->getSqlString();

      $rowset = $this->tableGateway->selectWith($select);

      return $rowset;
   }*/

   //SOAP Client Version
   public function getPerfilesByUsuario($id) {
      $id = (int) $id;

      $result = $this->client->call('getPerfilesByUsuario',array('id' => $id));

      $rowset = json_decode(json_encode($result), FALSE);
      return $rowset;
   }

}
